package com.deer.wms.ASN.manage.service;

import com.deer.wms.ASN.manage.model.asn.AsnMaster;
import com.deer.wms.ASN.manage.model.in.AcceptInsert;
import com.deer.wms.ASN.manage.model.in.AcceptRecord;
import com.deer.wms.ASN.manage.model.in.AcceptRecordCriteria;
import com.deer.wms.ASN.manage.model.in.AcceptRecordExcel;
import com.deer.wms.ASN.manage.model.qc.QcRecord;
import com.deer.wms.intercept.common.data.CurrentUser;
import com.deer.wms.project.root.service.SuperService;

import java.util.List;
import java.util.Map;
import java.util.Set;


/**
 *
 * @author 郭靖勋
 * @since 2019/12/18
 */
public interface AcceptRecordService extends SuperService<AcceptRecord> {

    /**
     * 根据criteria条件查询列表
     *
     * @param criteria AcceptRecordCriteria
     * @return List<AcceptRecord>
     */
    List<AcceptRecord> findList(AcceptRecordCriteria criteria);

    /**
     * 收货提交: 生成单个收货单并确认
     * @param acceptInsert AcceptInsert
     * @return Integer
     */
    Integer accept(AcceptInsert acceptInsert);

    List<AcceptRecord> findDayList(AcceptRecordCriteria criteria);

    List<AcceptRecord> findCanTongbu();

    /**
     * 创建并确认收货单
     * @param acceptInserts acceptInserts
     * @return List<AcceptRecord>
     */
    List<AcceptRecord> saveAndConfirmAcceptRecord(List<AcceptInsert> acceptInserts);

    /**
     * 新增收货单
     * @param acceptInserts 收货单数据
     * @return List<AcceptRecord>
     */
    List<AcceptRecord> createAcceptRecord(List<AcceptInsert> acceptInserts);

    /**
     * 收货单确认
     * @param acceptRecords 收货单
     * @return List<AcceptRecord>
     */
    List<AcceptRecord> confirmAcceptRecord(List<AcceptRecord> acceptRecords);

//    //入库单回传erp
//    String billToErp();

//    //入库单回传erp
//    String billToErp();

    //入库单实时回传erp

    String billToErpNew(String billNo, QcRecord newQcRecord);

    //修改质检状态
    void updateQcState(String acceptRecordCode,int qcState);

    void updateAllQcState(String asnBillNo, int qcState);

    List<AcceptRecord> findBillNo(String toBoxCode);

    //erp审核回传
    void checkBillToErp(String billId);

    /**
     * 容器编码找类型
     * @param code
     * @return
     */
    Map<String,Object> finbyCode(String code);

    /**
     * 直发虚仓业务
     * 根据入库任务直接生成收货单（accept_record，状态已确认，物料为免检）和出库任务（so_master,状态为已完成）
     * @param asnMaster 入库任务 currentUser操作人员信息（可以为空）
     * @return void
     */
    void StraightHairEmptyWarehouse(AsnMaster asnMaster, CurrentUser currentUser);

    /**
     * 根据任务明细--直接上架到指定库位
     * */
    void createByAsnDetail(AsnMaster asnMaster,String cellCode,CurrentUser currentUser);

    /**
     * 回传erp
     * */
    void toERP(String cellCode,AsnMaster asnMaster);


    void saveBathInv();

    void pdaBatchAccept(AsnMaster asnMaster, CurrentUser currentUser);

    long findCount(AcceptRecordCriteria criteria);

    public void pdaAccept(AsnMaster asnMaster, CurrentUser currentUser);
    /**
     * 合格未入库
     * @param criteria
     * @return
     */
    List<AcceptRecordExcel> notPut(AcceptRecordCriteria criteria);

    List<AcceptRecordExcel> findLast(Set<String> itemCodes);


    /**
     * 批量到货暂收
     * @param acceptInserts
     */
    void batchAccept(List<AcceptInsert> acceptInserts);

}
